require('dotenv').config();
const express = require('express');
const cors = require('cors');
const fileUpload = require('express-fileupload');
const OpenAI = require('openai');
const fs = require('fs');
const path = require('path');

const app = express();
const PORT = process.env.PORT || 8158;

// 中间件配置
app.use(cors());
app.use(express.json());
app.use(fileUpload({
  limits: { fileSize: 10 * 1024 * 1024 }, // 限制文件大小为10MB
  createParentPath: true
}));

// 创建临时文件夹用于存储上传的图片
const tempDir = path.join(__dirname, 'temp');
if (!fs.existsSync(tempDir)) {
  fs.mkdirSync(tempDir, { recursive: true });
}

// 初始化OpenAI客户端
const openai = new OpenAI({
  apiKey: process.env.DASHSCOPE_API_KEY || 'sk-de93cd872dc94555b7809404ea768b5c',
  baseURL: process.env.BASE_URL || 'https://dashscope.aliyuncs.com/compatible-mode/v1'
});

/**
 * 视觉识别接口
 * 支持两种调用方式：
 * 1. 通过URL上传图片
 * 2. 直接上传图片文件
 */
app.post('/vision/analyze', async (req, res) => {
  try {
    let imageUrl = null;
    let tempFilePath = null;
    
    // 获取分析提示文本
    const prompt = req.body.prompt || '图中描绘的是什么景象?';
    
    // 处理图片来源
    if (req.body.imageUrl) {
      // 方式1：从URL获取图片
      imageUrl = req.body.imageUrl;
    } else if (req.files && req.files.image) {
      // 方式2：从上传的文件获取图片
      const imageFile = req.files.image;
      const fileExtension = path.extname(imageFile.name);
      tempFilePath = path.join(tempDir, `${Date.now()}${fileExtension}`);
      
      await imageFile.mv(tempFilePath);
      
      // 读取文件并转换为base64
      const imageBuffer = fs.readFileSync(tempFilePath);
      const base64Image = imageBuffer.toString('base64');
      imageUrl = `data:image/${fileExtension.substring(1)};base64,${base64Image}`;
    } else {
      return res.status(400).json({ error: '请提供图片URL或上传图片文件' });
    }
    
    // 调用阿里云百炼的视觉模型
    const response = await openai.chat.completions.create({
      model: "qwen3-vl-plus", // 可根据需要更换模型
      messages: [
        {
          role: "user",
          content: [
            {
              type: "image_url",
              image_url: {
                "url": imageUrl
              }
            },
            {
              type: "text",
              text: prompt
            }
          ]
        }
      ]
    });
    
    // 清理临时文件
    if (tempFilePath && fs.existsSync(tempFilePath)) {
      fs.unlinkSync(tempFilePath);
    }
    
    // 返回分析结果
    res.json({
      success: true,
      result: response.choices[0].message.content
    });
  } catch (error) {
    console.error('视觉分析错误:', error);
    res.status(500).json({
      success: false,
      error: error.message || '视觉分析失败'
    });
  }
});

// 健康检查接口
app.get('/health', (req, res) => {
  res.json({ status: 'ok', message: '服务器运行正常' });
});

// 启动服务器
app.listen(PORT, () => {
  console.log(`服务器运行在 http://localhost:${PORT}`);
  console.log('可用接口:');
  console.log('- POST /vision/analyze - 视觉分析接口');
  console.log('- GET /health - 健康检查');
});